package org.xmap.ui.control;
/**
 * <p>菜单项是一个最小的菜单单元。</p>
 * @author Zealot
 * @version 1.0
 */
public final class MenuItem {
    /**
     * 菜单项的文字。
     */
    private String text;
    /**
     * 菜单项是否可以展开。
     */
    private boolean isExpand;
    /**
     * 菜单项拥有的子菜单。
     */
    private Menu subMenu;
    /**
     * 指定菜单项文字的构造函数。
     * @param text String 菜单项文字。
     */
    public MenuItem(String text) {
        this(text, new Menu());
    }
    /**
     * 指定菜单项文字和子菜单的构造函数。
     * @param text String 菜单项文字。
     * @param m Menu 子菜单。
     */
    public MenuItem(String text, Menu m) {
        this.text = text;
        this.isExpand = false;
        this.subMenu = m;
    }
    /**
     * 设置菜单项的文字。
     * @param text String 菜单项文字。
     */
    public void setText(String text) {
        if (text != null) {
            this.text = text;
        }
    }
    /**
     * 获得菜单项文字。
     * @return String 菜单项文字。
     */
    public String getText() {
        return this.text;
    }
    /**
     * 展开或收起子菜单，如果没有子菜单，则无效。
     * @param expand boolean 展开或收起。
     */
    public void setExpand(boolean expand) {
        this.isExpand = expand;
        if (this.subMenu.itemCount() == 0 && this.isExpand) {
            this.isExpand = false;
        }
    }
    /**
     * 获得当前菜单项的展开或收起状态。
     * @return boolean 当前是展开还是收起状态。
     */
    public boolean getExpand() {
        return this.isExpand;
    }
    /**
     * 获得当前菜单项的子菜单。
     * @return Menu 子菜单。
     */
    public Menu getSubmenu() {
        return this.subMenu;
    }
    /**
     * 添加子菜单。
     * @param text String 子菜单文字。
     */
    public void addSubmenu(String text) {
        if (text != null) {
            this.subMenu.addMenuItem(text);
        }
    }
    /**
     * 移除子菜单。
     * @param text String 子菜单文字。
     * @return boolean 是否移除成功。
     */
    public boolean removeSubmenu(String text) {
        if (text != null) {
            return this.subMenu.removeMenuItem(text);
        }
        return false;
    }
    /**
     * 检测当前菜单项是否有子菜单。
     * @return boolean 是否有子菜单。
     */
    public boolean hasSubmenu() {
        return (this.subMenu.itemCount() > 0);
    }
}
